package com.daodway.designpattern.innerclass;
/*规则3:当内部类在成员位置上，就可以被成员修饰符修饰
 * 当内部类被static修饰后，就只能访问外部类中的static成员，出现访问局限*/
public class Outer3 {
/*	a)在外部其他类中，如何访问static内部类的非静态成员呢？
	  答案：new Outer.Inner().seeOuter();
	  理由：因为外部内一旦被加载，静态内部类也被加载了，所以直接创建内部类对象调用方法即可
 */
//	   private int x = 1;
	   private static int x = 1;
	   static class Inner {
		   
		    public void seeOuter() {
		          System.out.println(x); //error
		    }
		    /*
		       b)在外部其他类中，如何访问static内部类的静态成员呢？
      			答案：Outer.Inner.seeOuter1();
		     */
		    public static void seeOuter1(){
		    	 System.out.println(x);
		    }
		    

	   }
	    /*
 				c)当内部类中定义了静态成员，该内部类必须是静态的
     */	   
//	   class Inner2{
//		    static int y = 2; //error
//		    public static void seeOuter2() { //error
//		    	System.out.println(x);
//		    }		
//	   }
	     
	   public static void main(String args[]){
		   
		   new Outer3.Inner().seeOuter();
		   
		   Outer3.Inner.seeOuter1();
	   }
 } 
